package com.线程Thread;
@SuppressWarnings("all")
public class 用户线程_守护线程 {
    /***
     * 1.用户线程（工作线程）：如果该线程是  以任务执行完 或 通知方式 结束的 则被称为用户线程；
     * 2.守护线程：一般为工作线程服务，当所有的用户线程结束，守护线程自动结束（例如：垃圾回收机制）
     * threadDaemon.setDaemon(true); 将threadDaemon线程设置成守护线程；
     *
     * 主线程工作中！！！！      主线程与守护线程一起执行
     * 守护线程正在工作~~~~
     * 主线程工作中！！！！
     * 守护线程正在工作~~~~
     * 守护线程正在工作~~~~
     * 主线程工作中！！！！
     * 主线程工作中！！！！
     * 守护线程正在工作~~~~
     * 守护线程正在工作~~~~
     * 主线程工作中！！！！
     * 守护线程正在工作~~~~       主线程与守护线程一起执行
     *
     * ====主线程结束了====*/    /// 主线程退出了，守护线程也推出了
    public static void main(String[] args) throws InterruptedException {
        ThreadDaemon threadDaemon = new ThreadDaemon();   ///创建线程；
        threadDaemon.setDaemon(true);   ///将创建的线程设置成守护线程；
        threadDaemon.start();    ///启动线程，主线程与子线程同时进行ing

        for (int i = 0; i < 5; i++) {
            System.out.println("主线程工作中！！！！");
            Thread.sleep(1000);
        }
        System.out.println("\n====主线程结束了====");    ///当主线程结束后，守护线程也随之结束；
    }
}

@SuppressWarnings("all")
class ThreadDaemon extends Thread {
    @Override
    public void run() {
        while (true) {
            /// 如果不设置成守护线程，该线程会一直无限循环，
            /// 如果设置成守护线程，所有线程结束，该线程就结束；
            System.out.println("守护线程正在工作~~~~");
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                System.out.println("中断异常");
            }
        }
    }
}
